package com.rainy.guoran.business.manager.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

import java.util.HashMap;

@AutoConfiguration
@ConditionalOnClass({OpenAPI.class})
@EnableConfigurationProperties(SwaggerProperties.class)
// 设置为 false 时，禁用
@ConditionalOnProperty(prefix = "springdoc.api-docs", name = "enabled", havingValue = "true", matchIfMissing = true)
public class SwaggerConfig {

    /***
     * 构建Swagger3.0文档说明
     * @return 返回 OpenAPI
     */
    @Bean
    public OpenAPI customOpenAPI(SwaggerProperties swaggerProperties) {
        // 返回信息
        return new OpenAPI() // 配置Swagger3.0描述信息
                .openapi("3.0.1")  // Open API 3.0.1(默认)
                .info(
                        new Info()
                                .title(swaggerProperties.getInfo().getTitle()) // 接口文档标题
                                .description(swaggerProperties.getInfo().getDescription()) // 接口文档描述
                                .version(swaggerProperties.getInfo().getVersion()) // 接口文档版本
                                .termsOfService(swaggerProperties.getInfo().getTermsOfService()) // 接口文档的服务条款地址
                                .license(new License() // 授权许可信息
                                        .name(swaggerProperties.getLicense().getName()) // 授权许可名称
                                        .url(swaggerProperties.getLicense().getUrl()) // 授权许可地址
                                        .identifier(swaggerProperties.getLicense().getIdentifier())  // 授权许可标识符
                                        .extensions(new HashMap<>())    // 扩展信息
                                )
                                .contact(new Contact()
                                        .name(swaggerProperties.getContact().getName())    // 联系人名称
                                        .url(swaggerProperties.getContact().getUrl())    // 联系人地址
                                        .email(swaggerProperties.getContact().getEmail())  // 联系人邮箱
                                        .extensions(new HashMap<>())    // 扩展信息
                                )
                );
    }
}
